DriverLib 사용시

SCI 인터럽트 처리 루틴

easyDSP MCU SCI 통신을 사용하여 PC MCU간 통신을 구현합니다 .따라서 사용자의  MCU프로그램은 easyDSP가 제공하는 SCI 인터럽트 처리 루틴를 포함하여야 합니다 .
관련된 파일은 아래와 같습니다 .

C2000 시리즈

ISR 프로그램 파일

F28001x
F28002
x
F28003x
 

F28004x
F2807x  
F2837x
F2838x
CPU1 또는 CPU2
F28P55x
F28P65x

easy28x_DriverLib_v11.2. c
easy28x_DriverLib_v11.2.

F2838x CM

easy28x_cm_DriverLib_v10.1.c
easy28x_cm_DriverLib_v10.1.h

ISR 프로그램 파일내의 대표적 함수 이름 및 기능은 하기와 같습니다 .
easyDSP_SCI_Init(void) : SCI
통신 채널 초기화
easyDSP_UART_Init (void) : UART
통신 채널 초기화 (F2838x CM대상 )
easy_RXINT_ISR (void) : RX_INT
ISR
easyDSP_Boot_Sync(void)
   : F2837xD, F2838xS, F2838xD 멀티 코어 부팅 및 동기화

사용자의 보드 환경에 맞춰서헤더 파일을  수정하셔야 함에 유의하세요 .
예를 들어 아래 선택은 F2807x 사용, easyDSP 통신 bps = 115200 으로 선택한 예제입니다 .
#define F28002x                    0
#define F28003x                    0
#define F28004x                    0
#define F2807x                     1
#define F28P65xS                  0
#define F28P65xD_CPU1          0
#define F28P65xD_CPU1_CPU2   0
#define F2837xS                    0
#define F2837xD_CPU1            0
#define F2837xD_CPU1_CPU2     0
#define F2838xD_CPU1            0
#define F2838xD_CPU1_CM       0
#define BAUDRATE                115200L

주의 ) device.h 파일안의 DEVICE_LSPCLK_FREQ 상수값이 사용 시스템에 매칭되어야 합니다. 이 상수는 easyDSP 통신의 SCI 보드레이트 설정에 사용됩니다.
참고로 easyDSP가 통신에 사용하는 모든 변수의 이름은 ezDSP_*와 같은 식의 첨자가 추가되어 있습니다. easyDSP 사용중 ezDSP_로 시작되는 변수 값은 변경하지 마세요

인터럽트 네스팅 (Interrupt Nesting)  처리

C2000 MCU 에서 하나의 ISR(인터럽트 서비스 루틴)이 수행될 때기본적으로는 다른 ISR이 수행될 수 없게 되어 있습니다. , 아무런 조치 없이는, easyDSP ISR이 수행될 때, 다른 중요한 사용자의 인터럽트가 수행될 수 없음을 의미합니다. 대부분의 경우 사용자는 리얼타임 제어를 유지하기 위해서, easyDSP ISR 수행여부에 상관없이, easyDSP보다 상위 개념의 인터럽트를 수행시켜야 합니다 .
easyDSP ISR 소스 코드에서는 INT_NESTING_START, INT_NESTING_END를 기본 제공하며, easyDSP ISR의 인터럽트 순위가 최하위로 설정됩니다.
인터럽트간 다양한 우선순위를 구현하기 위해서는 TI에서 예제 파일 (SW Prioritized ISR)를 사용하십시요. 이에 대해서는 하기 링크를 참조하셔서 사용자가 직접 코딩하시기 바랍니다. , 사용자가 직접, easyDSP ISR easy_RXINT_ISR ()의 첫단/마지막단 해당 부분을 수정하셔야 합니다 .
http://processors.wiki.ti.com/index.php/Interrupt_Nesting_on_C28x

플래쉬롬 동작시ISR의 빠르고 안정적인 동작을 위해

프로그램이 플래쉬롬에서 작동하는 경우, easyDSP ISR함수의 빠른 동작을 위해서는 해당 코드를 램에서 동작시키는 것이 좋습니다.이를 위해 헤더 파일에서 # progma 를 제공합니다.  TI.ramfunc 섹션을 위한 제반 코딩은 TI 자료를 참조하십시오 .

easyDSP
제공 헤더파일 에 하기 선언

#pragma CODE_SECTION(easy_RXINT_ISR, ".TI.ramfunc");

주의사항)특히 작성하신 프로그램이 " 플래쉬에서 동작되는 것이면서 플래쉬를 프로그래밍 "하는 것이라면 easyDSP ISR 를 반드시 램에서 동작시켜야 합니다. TI에서 제공되는 각종 flash API 함수가 수행되는 동안에는 flash가 기본적으로 동작하지 않기 때문에 easyDSP ISR 코드가 flash 에서 수행되게 되면 오동작을 하는 것입니다 .

단일 코어 프로그래밍  

DSP 프로그램중 초기 부분에 DSP의 인터럽트 (특히 시리얼 인터럽트 부분) easyDSP와 통신할 수 있도록 설정해주어야 합니다 . 아래에 사용 예제가 있습니다 . 우선 사용자가 원하는 인터럽트를 설정합니다 .그 후에 easyDSP_SCI_Init()를 호출합니다 .
프로그램 설치 폴더의 source/C2000/DriverLib 폴더안에 main.c 파일을 참조하십시요 .
easyDSP_SCI_Init()
에서는
1) SCI
관련 레지스터를 easyDSP용도에 맞게 설정

2) SCI 인터럽트를 사용할 수 있도록 관련 레지스터를 설정합니다 .

#include "easy28x_DriverLib_v11.2 .h"
main(void) {

    // 사용자의 인터럽트 관련 설정 이후, while(1) 이전 호출 
    easyDSP_SCI_Init();

    while(1) {
    }

}


멀티코어  프로그래밍 : F28P65xD, F2837xD, F2838xS, F2838xD의 CPU1 또는 CPU2 프로그램

싱글 코어 MCU와 동일하게, CPU1/CPU2 모두에 대해서 헤더 파일을 설정하고easyDSP_SCI_Init() 함수를 호출합니다.
다른 부분은 CPU2 또는 CM를 부팅시키고 각 코어간 동기화를  위한 easyDSP_Boot_Sync() 함수입니다.
easyDSP_Boot_Sync() 
함수가 호출되면 CPU1 CPU2/CM을 부팅시킵니다. 램부팅시에는 CPU2/CM이 부팅되기 까지 CPU1은 기다립니다플래쉬롬 부팅시에는 CPU2/CM 에 부팅 지령을 내린 후 바로 CPU1 프로그램이 후속 진행됩니다 .
easyDSP_Boot_Sync()
함수는 CPU1/CPU2 모두에서 호출되어야 하며기타 사항은 프로그램 설치 폴더의 source/C2000/driverlib 폴더안에 main.c 파일을 참조하십시요 .

#include "easy28x_DriverLib_v11.2 .h"
main(void) {

    Device_init (); 

    // CPU1 프로그램이라면, easyDSP_Boot_Sync() 호출 이전에 
    // CPU2, CM에 필요한 공유 메모리를 할당하는 코딩 삽입  

   
//  easyDSP_SCI_Init() 이전에 하기 함수 호출 
   
easyDSP_Boot_Sync(); 

   
//
사용자의 인터럽트 관련 설정 이후, while(1) 이전 호출  
    easyDSP_SCI_Init();

    while(1) {
    }

}




멀티코어  프로그래밍 : F2838x CM 프로그램

싱글 코어 MCU와 유사하게, 헤더 파일을 설정하고  easyDSP_UART_Init () 함수를 호출합니다.
다른 부분은 CPU1/CM 동기화를  위한 easyDSP_Boot_Sync() 함수입니다.
기타 사항은 프로그램 설치 폴더의 source/C2000/driverlib 폴더안에 main_cm.c 파일을 참조하십시요 .

#include "easy28x_cm_DriverLib_v10.1.h "
main(void) {  

   
CM_init();

   
// CM_init() 이후 , easyDSP_UART_Init()이전 호출
   
easyDSP_Boot_Sync(); 

    easyDSP_UART_Init();

   
while(1) {
    }
}